home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 2 / Atari Mega Archive CD - Volume 2.iso / 8bit / cislib_a / bugs2.act < prev    next >
Text File  |  1995-04-22  |  11KB  |  440 lines

  1.    ACTION! BUG SHEET #3 - part 2
  2.  
  3. -------------------------------------
  4.  
  5.    BUGS IN THE ACTION! CARTRIDGES
  6.  
  7. The following is a list of all bugs
  8. we currently know exist in the
  9. ACTION! cartridge.  We list these
  10. bugs separately from those in the
  11. RunTime library and/or the PAD disk
  12. or ToolKit, which occur in following
  13. pages.  Each bug is described in
  14. detail and, when possible, bug fixes
  15. are given.  Many of these bugs deal
  16. only with specific versions of
  17. ACTION!.  To find out which version
  18. of ACTION! you own, type the
  19. following from the ACTION! monitor:
  20.  
  21.   ?$B000 [RETURN]
  22.  
  23. Below is an actual copy of what
  24. printed following that command for
  25. one of our cartridges.
  26.  
  27.   45055,$B000 = 0 $0730 48 1840
  28.               ^
  29.  
  30. To find out the version number, look
  31. at the character to the right of the
  32. equals sign (here printed with a
  33. caret under it).  The "0" in this
  34. case implies that the cartridge is
  35. version 3.0.  If yours has a "6", you
  36. own version 3.6, etc.  As of the date
  37. of this bug sheet, the current
  38. cartridge version is 3.6.
  39.  
  40. 1.  OFFSETS -- Using a TYPE
  41.     declaration will generate a
  42.     spurious error whenever the code
  43.     offset (contents of location $B5)
  44.     is non-zero.
  45.  
  46.     Affects:  All versions of the
  47.     cartridge to date.  (Presumably
  48.     only noticed if using RunTime
  49.     disk, though.)
  50.  
  51.     Fix:  Make all TYPE declarations
  52.     before changing the code offset.
  53.  
  54.     Example:
  55.         ; Beginning of program --
  56.         ; First, declare TYPEs
  57.         TYPE IOCB =
  58.          [
  59.           BYTE Id, Devnum,
  60.                Command, Status
  61.          ]
  62.  
  63.         ; Then, if desired,
  64.         ; change offset
  65.         SET $B5 = $1000
  66.         ; example: offset=4096
  67.  
  68. 2.  OFFSETS -- Using a code offset
  69.     greater than $7FFF (i.e., a
  70.     negative offset, if you consider
  71.     it to be of type INT) causes the
  72.     compiler to generate improper
  73.     code.
  74.  
  75.     Affects:  All versions,
  76.     especially when used with the
  77.     RunTime disk.
  78.  
  79.     Fix:  No direct fix, but you may
  80.     use the relocator program
  81.     described later in this document
  82.     (which is also usable with
  83.     assembly language).
  84.  
  85. 3.  ATARI DOS -- Exiting to Atari DOS
  86.     from ACTION! can cause a system
  87.     crash if DUP.SYS is not present
  88.     on the disk in drive 1.
  89.  
  90.     Affects:  All versions, but only
  91.     when used with Atari DOS.
  92.  
  93.     Fix:  Use DOS XL (or be careful
  94.     when exiting to DOS).
  95.  
  96. 4.  ARRAYS AND ELSEIF -- We have just
  97.     learned that there is a
  98.     relatively obscure bug in ACTION!
  99.     related to the use of ELSEIF.  In
  100.     particular, statements similar to
  101.     the form
  102.       ELSEIF a(i) = 0 THEN ...
  103.     (where a is an ARRAY and i is a
  104.     CARD OR INT), or statements like
  105.       ELSEIF p^ = 0 THEN
  106.     (where p is a POINTER) produce
  107.     incorrect code.  
  108.  
  109.     Affects:  All versions
  110.  
  111.     Fix:  There is no direct fix at
  112.     this time.  The best way around
  113.     the problem seems to be to code
  114.     something like this:
  115.       t = a(i) ; t is an INTEGER
  116.          ...
  117.       ELSEIF t=0 THEN ...
  118.     This works properly.
  119.  
  120. 5.  WRITING OBJECT FILES -- If a
  121.     monitor Write command fails
  122.     because of a disk error (e.g.,
  123.     disk full, 162, or device done,
  124.     144), the IOCB is not properly
  125.     closed.  If the disk is changed
  126.     before another disk operation is
  127.     performed, the new disk can have
  128.     invalid data written to it.
  129.  
  130.     Affects:  All versions
  131.  
  132.     Fix:  If you get an error when
  133.     writing an ACTION! object file,
  134.     type the following command to the
  135.     monitor:
  136.       X Close( 1 ) [RETURN]
  137.     You can then erase the file which
  138.     caused the error.
  139.  
  140. 6.  HEX ARRAY SIZES -- Hexadecimal
  141.     values as array dimensions cause
  142.     incorrect code to be generated.
  143.  
  144.     Affects:  All versions
  145.  
  146.     Fix:  Use decimal array
  147.     dimensions.
  148.  
  149. 7.  TYPE POINTER ARGUMENTS --
  150.     PROC/FUNC declarations with
  151.     record pointer arguments other
  152.     than the first don't compile
  153.     correctly.  For example, the
  154.     following code generates an error
  155.     7 (invalid argument list):
  156.       TYPE REC=[...]
  157.          ...
  158.       PROC Test( BYTE x, REC POINTER
  159.     p )
  160.  
  161.     Affects:  All versions
  162.  
  163.     Fix:  Omit the comma in the
  164.     argument list for the PROC/FUNC,
  165.     as in:
  166.       PROC Test( BYTE x
  167.               REC POINTER p )
  168.  
  169.     As this is just a temporary fix,
  170.     it may not work in future
  171.     versions, but the correct
  172.     declaration (with the comma)
  173.     will.
  174.  
  175. 8.  MONITOR LOCKUP -- Typing the
  176.     following command from the
  177.     monitor will lock up the system:
  178.       R* [RETURN]
  179.  
  180.     Affects:  All versions
  181.  
  182.     Fix:  Don't do it!  If you do
  183.     type that command, hit [RESET]
  184.  
  185. 9.  PADDLE FUNCTION -- The Paddle
  186.     function does not work properly
  187.     in all versions of the ACTION!
  188.     cartridge.
  189.  
  190.     Affects:  Versions 3.0 to 3.5
  191.  
  192.     Fix:  Make the following
  193.     declaration in your program:
  194.       BYTE ARRAY Paddle(4) = 624
  195.  
  196. 10. SOUND ON CHANNELS 3 AND 4 -- If
  197.     you use a Sound() procedure call
  198.     after having done any disk I/O,
  199.     sound channels 3 and 4 will
  200.     remain silent.  This is because
  201.     Atari's OS does not reset some of
  202.     the serial control registers
  203.     completely.
  204.  
  205.     Affects:  Versions 3.0 to 3.5
  206.  
  207.     Fix:  Type in and use the
  208.     following procedure.  You should
  209.     call this before doing any
  210.     Sound() calls and/or in place of
  211.     any SndRst() calls:
  212.  
  213.       ; Contributed by Michael Ross
  214.         PROC SoundOff()
  215.             BYTE AudCtl = $D208,
  216.                  SSKCtl = $232,
  217.                  SKCtl  = $D20F
  218.  
  219.             SSKCtl = 3
  220.             SKCtl  = 3
  221.             AudCtl = 0
  222.             SndRst()
  223.         RETURN
  224.  
  225. 11. TYPE FIELDS AS PARAMETERS --
  226.     Using fields of TYPEs as
  227.     parameters to PROCs or FUNCs
  228.     generates incorrect code.  For
  229.     example,
  230.       MoveBlock( rec.addr1,
  231.     rec.addr2, length )
  232.  
  233.     Affects:  Versions 3.0 to 3.5
  234.  
  235.     Fix:  Assign the TYPE field to a
  236.     temporary variable and pass that
  237.     as a parameter:
  238.       temp1 = rec.addr1
  239.       temp2 = rec.addr2
  240.       MoveBlock(temp1,temp2,length)
  241.  
  242. 12. SASSIGN PROBLEMS -- SAssign does
  243.     not work properly when the source
  244.     string has a length of zero.
  245.  
  246.     Affects:  Versions 3.0 to 3.5
  247.  
  248.     Fix:  No fix available at this
  249.     time.
  250.  
  251. 13. CARD FIELDS IN TYPES -- Accessing
  252.     CARD fields of TYPEs generates
  253.     incorrect code.
  254.  
  255.     Affects:  Versions 3.0 to 3.2
  256.  
  257.     Fix:  No fix available at this
  258.     time.
  259.  
  260. 14. MOVEBLOCK PROBLEMS -- MoveBlock
  261.     does not move more than 256 bytes
  262.     of data.
  263.  
  264.     Affects:  Versions 3.0 to 3.2
  265.  
  266.     Fix:  No fix at this time.  You
  267.     could write an ACTION! routine to
  268.     do the equivalent.
  269.  
  270. 15. CONTROL-SHIFT RETURN -- Using
  271.     [CS] RETURN to split a line into
  272.     two lines generates garbage in
  273.     the second line.
  274.  
  275.     Affects:  Versions 3.0 and 3.1
  276.  
  277.     Fix:  No fix available, but not a
  278.     disastrous problem.
  279.  
  280. 16. DIVISION ERRORS -- On old
  281.     cartridges, neither the "/"
  282.     operator nor the "MOD" operator
  283.     works properly under certain
  284.     conditions.
  285.  
  286.     Affects:  Versions 3.0 and 3.1
  287.  
  288.     Fix:  Insert the following code
  289.     into your program before any of
  290.     your own PROCedure or FUNCtion
  291.     declarations (this can be done
  292.     easily using INCLUDE):
  293.  
  294.     ; Copyright (c) 1983 by
  295.     ; Action Computer Services
  296.     ;
  297.     ; Permission is granted to
  298.     ; duplicate and/or distribute
  299.     ; the contents of this file
  300.     ; to ACTION! users.  Copies of
  301.     ; this file may not be sold or
  302.     ; used for monetary gain.
  303.  
  304.     PROC DivI=*()
  305.     [$20 $A06C $85 $86 $A2 $10
  306.      $26 $82 $26 $83 $26 $86 $26
  307.      $87 $38 $A5 $86 $E5 $84 $A8
  308.      $A5 $87 $E5 $85 $90 $04 $85
  309.      $87 $84 $86 $CA $D0 $E5 $A5
  310.      $82 $2A $26 $83 $A6 $83
  311.      $4C $A032]
  312.  
  313.     PROC RemI=*()
  314.     [$20 DivI $86A5 $87A6 $60]
  315.  
  316.     SET $4EA=DivI
  317.     SET $4EC=RemI
  318.  
  319. 17. ERROR ROUTINE NOT INITIALIZED --
  320.     The address of the Error
  321.     PROCedure is not restored by
  322.     ACTION! if a user program has
  323.     changed it.
  324.  
  325.     Affects:  Versions 3.0 and 3.1
  326.  
  327.     Fix:  Make sure to restore the
  328.     original Error vector upon
  329.     exiting a program, if you changed
  330.     it.
  331.  
  332. 18. COMPLEX EXPRESSIONS IN UNTIL --
  333.     Complex relational expressions in
  334.     an UNTIL statement generate
  335.     incorrect code.  For example,
  336.       DO
  337.         ...
  338.         UNTIL a>0 AND b=3
  339.       OD